package com.mango.leet.code.easy;

/**
 * 67. 二进制求和
 */
/**
 * 给你两个二进制字符串，返回它们的和（用二进制表示）。
 *
 * 输入为 非空 字符串且只包含数字 1 和 0。
 *
 *  
 *
 * 示例 1:
 *
 * 输入: a = "11", b = "1"
 * 输出: "100"
 * 示例 2:
 *
 * 输入: a = "1010", b = "1011"
 * 输出: "10101"
 *  
 *
 * 提示：
 *
 * 每个字符串仅由字符 '0' 或 '1' 组成。
 * 1 <= a.length, b.length <= 10^4
 * 字符串如果不是 "0" ，就都不含前导零。
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/add-binary
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */

/**
 * @Author: mango
 * @Date: 2022/3/31 10:42 下午
 */
public class LC67_AddBinary {
    public static void main(String[] args) {
        System.out.println(new Solution().addBinary("1111","1111"));
    }
    static class Solution {
        public String addBinary(String a, String b) {
            int na = a.length();
            int nb = b.length();
            int ia = na - 1, ib = nb - 1;
            String result = "";
            while (ia>=0 && ib>=0){
                int ca = Integer.valueOf(a.charAt(ia--)+"");
                int cb = Integer.valueOf(b.charAt(ib--)+"");
                int sum = ca + cb;
                result = sum + result;
            }
            while(ia>=0){
                result = Integer.valueOf(a.charAt(ia--)+"") + result;
            }
            while(ib>=0){
                result = Integer.valueOf(b.charAt(ib--)+"") + result;
            }
            System.out.println(result);
            int n = result.length();
            int i = n-1;
            String ans = "";
            boolean plusOne = false;
            while (i>=0){
                if(result.charAt(i) == '1'){
                    if(plusOne) {
                        ans = "0" + ans;
                        plusOne = true;
                    }else{
                        ans = "1" + ans;
                    }
                }else if(result.charAt(i) == '2'){
                    if(plusOne){
                        ans = "1" + ans;
                    }else {
                        ans = "0" + ans;
                    }
                    plusOne = true;
                }else{
                    if(plusOne){
                        ans = "1" + ans;
                    }else {
                        ans = "0" + ans;
                    }
                    plusOne = false;
                }
                i--;
            }
            if(plusOne){
                ans = "1" + ans;
            }
            return ans;
        }
    }
}
 
